package com.utooo.bid.prompt;

public class BidPromptTemplate {

    // 你是专业的投标文件分析师
    public static final String BID_SYSTEM_MESSAGE_PROMPT = "你是专业的投标文件分析师。";

    public static final String BID_SPECIFY_FIELDS_PROMPT_TEMPLATE = """
            你的任务是从给定的标书内容中提取特定字段的信息，并以非格式化json返回。
            请注意，返回的结果必须是纯JSON内容，不能包含任何额外的标记（例如“json”或“”）。确保输出可以直接被解析为JSON对象。
            需要提取的字段包括：
            1. bidProjectName(招标项目名称)
            2. bidProjectCode(招标项目编号)
            3. registrationDeadline(报名截止日期)(yyyy-MM-dd HH:mm:ss格式)
            4. bidOpeningTime(开标时间)(yyyy-MM-dd HH:mm:ss格式)
            5. bidProjectBudget(招标项目预算)
            6. bidCompanyName(招标单位名称)
            7. contactPerson(联系人)
            8. contactPhone(联系电话)
            9. bidNoticeUrl(招标公告地址)
            请按照以下格式输出结果：
            {
                "bidProjectName": "具体内容",
                "bidProjectCode": "具体内容",
                "registrationDeadline": "yyyy-MM-dd HH:mm:ss格式的具体内容",
                "bidOpeningTime": "yyyy-MM-dd HH:mm:ss格式的具体内容",
                "bidProjectBudget": "具体数值",
                "bidCompanyName": "具体内容",
                "contactPerson": "具体内容",
                "contactPhone": "具体内容",
                "bidNoticeUrl": "具体内容"
            }
            如果在标书中未找到某个字段的相关内容，请在对应字段中填写 ""。
            """;


    private static final String BID_ANALYSIS_TEMPLATE = """
            你的任务是解析标书文件，提取其中的重要指标和参数，为后期生成投标文件的目录及内容使用。
            请确保输出为非格式化（单行）JSON，JSON对象的键应为上述关键指标和参数，对应的值为提取并整理后的信息。
            请注意，返回的结果必须是纯JSON内容，不能包含任何额外的标记（例如“json”或“”）。确保输出可以直接被解析为JSON对象。
            例如：
            {"基础信息":{"招标人/代理信息":{"招标人":"北京恒远科技有限公司","招标人联系方式":"010-1234-5678","招标代理机构":""}}}
            请仔细阅读以下标书文件：
            【{{content}}】
            在解析标书文件时，重点关注以下关键指标和参数：
            {{bidCatalogs}}
            请按照以下步骤进行解析：
            1. 通读整个标书文件，熟悉文件内容和结构。
            2. 针对每个关键指标和参数，在文件中查找相关的内容。
            3. 准确提取与每个关键指标和参数相关的信息。
            4. 对提取的信息进行整理和归纳。
            """;

    public static final String BID_TECH_CATALOG_PROMPT_TEMPLATE = """
            请根据上述对话，帮我生成商务标的目录详细，要求如下：
            1. 使用递归JSON格式（纯JSON内容，不能包含任何额外的标记（例如“json”或“”））表示层级关系。
            2. 字段命名：
               - `catalogName`（章节名称）
               - `sectionNumber`（动态生成的x.x.x编号）
               - `children`（子章节集合）。
            3. 每个章节必须独立生成连续编号系统。
            4. 确保商务标深度≥3级。
            5. 不得出现"商务标目录"顶层节点。
            6. 数据结构格式必须是对象数组格式。
            ▂▂▂▂▂ 商务标目录要求 ▂▂▂▂▂
            **必须包含：**
            [√] 报价明细清单
            [√] 付款进度计划
            [√] 商务条款响应
            [√] 履约保函格式
            [√] 成本构成分析

            **示例片段：[{
              "catalogName": "付款方式",
              "sectionNumber": "2.4",
              "children": [
                {"catalogName": "进度款支付条件", "sectionNumber": "2.4.1"}
              ]
            }]""";

    public static final String BID_BUSINESS_CATALOG_PROMPT_TEMPLATE = """
            请根据上述对话，帮我生成技术标目录，要求如下：
            1. 使用递归JSON格式（纯JSON内容，不能包含任何额外的标记（例如“json”或“”））表示层级关系。
            2. 字段命名：
               - `catalogName`（章节名称）
               - `sectionNumber`（动态生成的x.x.x编号）
               - `children`（子章节集合）。
            3. 每个章节必须独立生成连续编号系统4. 确保技术标深度≥3级5. 不得出现"技术标目录"顶层节点。
            4. 确保技术标深度≥3级。
            5. 不得出现"技术标目录"顶层节点。
            6. 数据结构格式必须是对象数组格式。
            ▂▂▂▂▂ 技术标目录要求 ▂▂▂▂▂
            **必须包含：**
            [√] 技术方案（至少三级嵌套）
            [√] 项目团队资质证明
            [√] 实施进度计划
            [√] 质量保障体系
            [√] 技术偏离表

            **示例片段：**
            [{
              "catalogName": "技术实施方案",
              "sectionNumber": "3.2",
              "children": [
                {"catalogName": "网络拓扑图", "sectionNumber": "3.2.1"}
              ]
            }]
            """;


    public static final String BID_BUSINESS_CATALOG_CONTENT_PROMPT_TEMPLATE = """
            你的任务是根据上述生成的商务标目录生成相应的内容，内容格式为 markdown 格式。
            在生成内容时，请遵循以下指南：
            1. 内容应围绕商务标目录展开，逻辑清晰，层次分明。
            2. 按照 markdown 格式的规范，合理使用标题、列表、段落等元素。
            3. 对于目录中的每个条目，提供具体且相关的信息，内容要具有一定的专业性和完整性。
            4. 语言表达简洁明了，避免冗长复杂的句子和表述。
            5. 确保生成的内容与商务标目录的主题和要求相符。
            6. 生成的内容字数要超过1000字。
            """;

    public static final String BID_TECH_CATALOG_CONTENT_PROMPT_TEMPLATE = """
            你的任务是根据根据上述生成的技术标目录生成相应的内容，并以markdown格式呈现。
            在生成内容时，请遵循以下指南：
            1. 确保内容与技术标目录中的每个条目相关且具有逻辑性。
            2. 对于每个目录条目，提供足够详细的信息来阐述其要点。
            3. 按照 markdown 格式的规范，合理使用标题、列表、段落等元素。
            4. 语言表达要清晰、准确、专业。
            5. 生成的内容字数要超过1000字。
            """;

    public static final String BID_BUSINESS_CATALOG_CONTENT_PROMPT_BASED_ON_KNOWLEDGE_TEMPLATE = """
            你的任务是根据上述生成的商务标目录与检索的内容生成相应的内容，内容格式为 markdown 格式。
            在生成内容时，请遵循以下指南：
            1. 基于但不限于检索的内容来生成。
            2. 内容应围绕商务标目录展开，逻辑清晰，层次分明。
            3. 按照 markdown 格式的规范，合理使用标题、列表、段落等元素。
            4. 对于目录中的每个条目，提供具体且相关的信息，内容要具有一定的专业性和完整性。
            5. 语言表达简洁明了，避免冗长复杂的句子和表述。
            6. 确保生成的内容与商务标目录的主题和要求相符。
            7. 生成的内容字数要超过1000字。
            """;

    public static final String BID_TECH_CATALOG_CONTENT_PROMPT_BASED_ON_KNOWLEDGE_TEMPLATE = """
            你的任务是根据根据上述生成的技术标目录与检索的内容生成相应的内容，并以markdown格式呈现。
            在生成内容时，请遵循以下指南：
            1. 基于但不限于检索的内容来生成。
            2. 确保内容与技术标目录中的每个条目相关且具有逻辑性。
            3. 对于每个目录条目，提供足够详细的信息来阐述其要点。
            4. 按照 markdown 格式的规范，合理使用标题、列表、段落等元素。
            5. 语言表达要清晰、准确、专业。
            6. 生成的内容字数要超过1000字。
            """;

    public static String createBidAnalysisPrompt(String bidCatalogs, String content) {
        return BID_ANALYSIS_TEMPLATE.replace("{{bidCatalogs}}", bidCatalogs).replace("{{content}}", content);
    }

}